bffd5021dd7ae5d40bd975da4330fffa405812f2,src/mltk/predictor/gam/GA2MLearner.java,GA2MLearner,buildClassifier,#GAM#List#Instances#number#,384

Before Change


			// Derivitive to attribute k
			// Minimizes the loss function: log(1 + exp(-2yF))
			for (int i = 0; i < trainSet.size(); i++) {
				double r = OptimUtils.getPseudoResidual(predictionTrain[i], target[i]);
				trainSet.get(i).setTarget(r);
			}

After Change



		// Initialize predictions and residuals
		double[] pTrain = new double[trainSet.size()];
		double[] rTrain = new double[trainSet.size()];
		OptimUtils.computePseudoResidual(pTrain, target, rTrain);

		for (int i = 0; i < pTrain.length; i++) {
			Instance instance = trainSet.get(i);
			pTrain[i] = gam.regress(instance);
		}

		// Gradient boosting
		for (int iter = 0; iter < maxNumIters; iter++) {
			int k = iter % terms.size();
			// Derivitive to attribute k
			// Minimizes the loss function: log(1 + exp(-2yF))
			for (int i = 0; i < trainSet.size(); i++) {
				trainSet.get(i).setTarget(rTrain[i]);
			}

			BoostedEnsemble boostedEnsemble = regressors.get(k);

			// Train model
			IntPair term = terms.get(k);
			cutter.setAttIndices(term.v1, term.v2);
			BaggedEnsemble baggedEnsemble = learner.build(bags);
			if (learningRate != 1) {
				for (int i = 0; i < baggedEnsemble.size(); i++) {
					Function2D func = (Function2D) baggedEnsemble.get(i);
					func.multiply(learningRate);
				}
			}
			boostedEnsemble.add(baggedEnsemble);

			// Update predictions
			for (int i = 0; i < trainSet.size(); i++) {
				Instance instance = trainSet.get(i);
				double pred = baggedEnsemble.regress(instance);
				pTrain[i] += pred;
				rTrain[i] = OptimUtils.getPseudoResidual(pTrain[i], target[i]);
			}

			double measure = metric.eval(pTrain, target);